<?php
/**
 * Controller_Category
 *
 * Класс Controller_Category отвечает за обработку категорий
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class Controller_Category extends Controller_Base {
	
	/**
	 * Выбор действия по URL
	 *
	 */
	public function action() {
		Service_Debug::setDebug();
		switch ($this->arrRequest[1]) {
			case '': case 'list':
				$this->actionList();
				break;
			case 'add':
				if (SimpleAdministration::isAdmin())	$this->actionAdd();
				else $this->setError(403);
				break;
			case 'edit':
				if (SimpleAdministration::isAdmin()) {
					$categoryId = Category::getId($this->arrRequest[2]);
					if (!$categoryId) $this->setError(404);
					else {
						$objCategory = new Category($categoryId);
						$this->actionEdit($objCategory);
					}
				}
				else $this->setError(403);
				break;
			default:
				$this->setError(404);
				break;
		}
	}
	
	/**
	 * Выводит страницу конкретной категории
	 *
	 */
	public function actionOne($objCategory) {
		Service_Debug::setDebug();
		$arrMasters = $objCategory->getArrMasters();
		$this->showLeftColumn = true;
		$this->title = $this->pageHead = $objCategory->getField('title');
		if (SimpleAdministration::isAdmin())$this->editUrl = W_ABSPATH . 'categories/edit/' . $objCategory->getField('url');
		
		$objViewCategory = new View_Category();
		$this->showHeader();
		$objViewCategory->showCategoryPage($objCategory,$arrMasters);
		$this->showFooter();
	}
	
	/**
	 * Выводит список существующих категорий
	 *
	 */
	public function actionList() {
		Service_Debug::setDebug();
		$objCategory = new Category();
		$arrCategories = $objCategory->find('all', array('order' => 'category_name ASC'));
		$this->showLeftColumn = true;
		$this->title = $this->pageHead = 'Список категорий';
		if (SimpleAdministration::isAdmin())$this->addUrl = W_ABSPATH . 'categories/add';
		
		$objViewCategory = new View_Category();
		
		$this->showHeader();
	 	$objViewCategory->showAdminList($arrCategories);
	 	$this->showFooter();
		
	}
	
	/**
	 * Страница добавления категорий
	 */
	public function actionAdd() {
		Service_Debug::setDebug();
		if (isset($_POST['Category'])) {
			$objCategory = new Category($_POST['Category']);
			if ($objCategory->save()) User_Session::moveTo(W_ABSPATH . 'categories/edit/' . $objCategory->getField('url'), 'Категория успешно добавлена', 1);
		}
		else $objCategory = new Category;
	
		$this->pageHead = 'Добавление категории';
		$objViewCategory = new View_Category();
		$this->addWysiwygMetas();
	
		$this->showHeader();
		$objViewCategory->showEditForm($objCategory);
		$this->showFooter();
	}
	
	/**
	 * Выводит страницу редактирования категории
	 *
	 * @param Article $objArticle - объект статьи для редактирования
	 */
	public function actionEdit($objCategory) {
		$editId = $objCategory->id;
		if (isset($_POST['Category'])) {
			$objCategory = new Category($_POST['Category']);
			if ($objCategory->id != $editId) User_Session::moveTo(View_Base::getLanguageUrl(W_ABSPATH) . 'categories/', Service_Translate::getText('Недопустимое действие'));
			if ($objCategory->save()) User_Session::moveTo(W_ABSPATH . 'categories/', 'Категория успешно сохранена', 1);
		}
		 
		$objViewCategory = new View_Category();
		$this->pageHead = $this->title = 'Редактирование категории "' . $objCategory->getField('category_name') . '"';
		$this->addWysiwygMetas();
	
		$this->showHeader();
		$objViewCategory->showEditForm($objCategory);
		$this->showFooter();
	}
}
?>